package logging;

import java.util.ArrayList;

import Exception.InvalidLevelException;
import Handler.Handler;

public interface ILogger {
	
	/*
	 * log messages with TRACE level
	 */
	void trace(String message);
	
	/*
	 * log trace message with associated throwable
	 */
	void trace(String message, Throwable throwable);

	/*
	 * log messages with DEBUG level
	 */
	void debug(String message);
	
	/*
	 * log debug message with associated throwable
	 */
	void debug(String message, Throwable throwable);
	
	/*
	 * log messages with INFO level
	 */
	void info(String message);
	
	/*
	 * log info message with associated throwable
	 */
	void info(String message, Throwable throwable);
	
	/*
	 * log messages with WARN level
	 */
	void warn(String message);
	
	/*
	 * log warn message with associated throwable
	 */
	void warn(String message, Throwable throwable);
	
	/*
	 * log messages with ERROR level
	 */
	void error(String message);
	
	/*
	 * log error message with associated throwable
	 */
	void error(String message, Throwable throwable);
	
	/*
	 * log messages with FATAL level
	 */
	void fatal(String message);
	
	/*
	 * log fatal message with associated throwable
	 */
	void fatal(String message, Throwable throwable);
	
	/*
	 * log messages according to the provided level.
	 */
	void log(Level level, String message);
	
	/*
	 * log message with associated throwable
	 */
	void log(Level level, String message, Throwable throwable);
	
	/*
	 * set the current level
	 */
	void setLevel(String level) throws InvalidLevelException;
	
	/*
	 * returns the current level
	 */
	Level getLevel();
	
	/*
	 * return handlers list
	 */
	ArrayList<Handler> getHandlerList();

}
